<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
    构造函数继承
    为解决子类实例会互相影响的问题，提出了复用父类的构造函数的构造函数继承方式
-->
<script>
// 声明父类
    function SuperClass(id) {
      //引用类型共有属性
      this.books = ['a','b','c'];
      //值类型共有属性
      this.id = id ;
    }
//    父类声明原型方法
    SuperClass.prototype.showBooks = function (){
      console.log(this.books)
    }
//    声明子类
function Subclass(id){
  //继承父类
  SuperClass.call(this,id);
}
//第一个子类实例
let instance1 = new Subclass()
//第二个子类实例
let instance2 = new Subclass()

//实现子类的实例是否会互相影响
instance1.books.push('d')

console.log(instance1.books)
console.log(instance2.books)
//结果是不会互相影响
//下面这个会报错，因为是通过子类调用父类的构造函数实现的继承，在子类的原型上并没有父类的函数
instance1.showBooks()
</script>
</body>
</html>
